// Package config 包含应用程序的配置初始化逻辑。
// 本文件用于初始化 MySQL 数据库连接，并将其存储到全局变量中以供其他模块使用。
package config

import (
	"exchangeapp/global" // 导入全局变量包，用于存储数据库实例
	"log"                // 用于日志记录
	"time"               // 用于设置数据库连接的最大生命周期

	"gorm.io/driver/mysql" // GORM 的 MySQL 驱动
	"gorm.io/gorm"         // GORM ORM 框架
)

// initDB 初始化 MySQL 数据库连接
func initDB() {
	// 从全局配置中读取数据库连接信息
	dsn := AppConfig.Database.Dsn

	// 使用 GORM 打开数据库连接
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		// 如果连接失败，记录错误日志并终止程序
		log.Fatalf("Failed to initialize database, got error: %v", err)
	}

	db.Set("gorm:table_options", "CHARSET=utf8mb4")//设置数据库支持中文(不知道为什么在dsn中设置没用)

	// 获取底层的 sql.DB 对象以进行进一步配置
	sqlDB, err := db.DB()

	// 设置数据库连接池的最大空闲连接数
	sqlDB.SetMaxIdleConns(AppConfig.Database.MaxIdleConns)
	// 设置数据库连接池的最大打开连接数
	sqlDB.SetMaxOpenConns(AppConfig.Database.MaxOpenConns)
	// 设置连接的最大生命周期
	sqlDB.SetConnMaxLifetime(time.Hour)

	if err != nil {
		// 如果配置失败，记录错误日志并终止程序
		log.Fatalf("Failed to configure database, got error: %v", err)
	}

	// 将数据库实例存储到全局变量中
	global.Db = db
}
